package br.com.simora.radio;

import java.util.List;

import javax.inject.Named;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import br.com.simora.persistence.AbstractDAO;

@Named("radioDAO")
public class RadioDAO extends AbstractDAO {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8881591268204484884L;

	public Radio recuperaRadioPorNome(String nome) {
		CriteriaBuilder qb = manager.getCriteriaBuilder();
		CriteriaQuery<Radio> cq = qb.createQuery(Radio.class);
		Root<Radio> tb = cq.from(Radio.class);
		cq.select(tb);
		cq.where(qb.equal(tb.get("nome"), nome));
		return (Radio) recuperaRegistro(montaQuery(cq));
	}
	
	public List<String> recuperaCidades(String estadoSigla) {
		CriteriaBuilder qb = manager.getCriteriaBuilder();
		CriteriaQuery<Radio> cq = qb.createQuery(Radio.class);
		Root<Radio> tb = cq.from(Radio.class);
		cq.select(tb.get("cidade")).distinct(true);
		cq.where(qb.equal(tb.get("estado"), estadoSigla));
		return (List<String>) recuperaLista(montaQuery(cq));
	}
	
	public List<String> recuperaEstados(String regiaoNome) {
		CriteriaBuilder qb = manager.getCriteriaBuilder();
		CriteriaQuery<Radio> cq = qb.createQuery(Radio.class);
		Root<Radio> tb = cq.from(Radio.class);
		cq.select(tb.get("estado")).distinct(true);
		cq.where(qb.equal(tb.get("regiao"), regiaoNome));
		return (List<String>) recuperaLista(montaQuery(cq));
	}
	
	public List<Radio> recuperaRadioPorCidade(String cidadeNome) {
		CriteriaBuilder qb = manager.getCriteriaBuilder();
		CriteriaQuery<Radio> cq = qb.createQuery(Radio.class);
		Root<Radio> tb = cq.from(Radio.class);
		cq.select(tb);
		cq.where(qb.equal(tb.get("cidade"), cidadeNome));
		return (List<Radio>) recuperaLista(montaQuery(cq));
	}
	
	

}